package org.example
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SparkSession
object data1_core3 {
  def main(args: Array[String]): Unit = {
    //spark运行环境
    val spark = SparkSession
      .builder
      .master("local[*]")
      .appName("spark")
      .getOrCreate()
    val sc = spark.sparkContext

//键值对key&value 一个键值对就是一个元组
    val data1 =sc.makeRDD(List(("张三",2000),("李四",2500),("王五",5000),("张三",3600)))
    val data2 =sc.makeRDD(List(("张三",3000),("赵四",3500),("王五",6000),("张三",4600)))

//  聚合(将相同key的值累加)
   // data1.reduceByKey((x,y)=>x+y).foreach(println)
// groupbykey （将相同key的值生成新的序列）
   // data1.groupByKey().foreach(println)
// 连接 join 相同的key逐一匹配
    //data1.join(data2).foreach(println)
//左（右）合并是以左（右）为主 相同的key逐一匹配 没有的key为None
    //data1.leftOuterJoin(data2).foreach(println)
    //data1.rightOuterJoin(data2).foreach(println)
//合并(累加key也累加value)好
    data1.combineByKey(
      v=>(v,1),
      (t:(Int,Int),v)=> {
        (t._1 + v, t._2 + 1)
      },
    (t1: (Int, Int), t2:(Int,Int)) => {
      (t1._1 +t2._1 ,t1._2+t2._2)
    }
    ).foreach(println)
// 聚合（求最大（小）值）
   data1.aggregateByKey(0)(math.max(_,_),_+_).foreach(println)




sc.stop()
  }

}
